// 使用 interface 定义对象类型
interface Person {
  readonly id: number; // 必填属性，只读的，类型是number
  name: string; // 必填属性
  age: number; // 必填属性
  sex?: string; // 可选属性
  setName(name: string): void; // void 常用函数没有返回值（undefined 或 null）
  // 任意属性
  // [key: string]: any;
}

const person: Person = {
  id: 1,
  name: "jack",
  age: 18,
  // sex: "男",
  setName(name) {
    this.name = name;
  },
  // aaa: "", // 多写属性不行
};

// 接口声明合并
interface IAnimal {
  name: string;
}

interface IAnimal {
  age: number;
}

const animal: IAnimal = {
  name: "dog",
  age: 1,
};

// 定义函数类型
interface Fn {
  (x: number, y: number): number;
}

const fn1: Fn = (x, y) => x + y;
const fn2: Fn = (x, y) => x + y;

// 定义数组类型
interface Arr {
  [index: number]: string;
}

const arr: Arr = ["hello"];
